package com.quartz.listeners;

import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.TriggerListener;

/**
 * @author hewei
 * @description  希望在触发器触发时得到通知的类实现的接口。
 * @date 9:47 2021/5/12
 * @param
 * @return
 **/
@Slf4j
public class QuartzTriggerListeners implements TriggerListener {


    /**
     * TriggerListener的名称。
     * @return
     */
    @Override
    public String getName() {
        return "auartzTriggerListeners";
    }

    /**
     *当触发器已触发，且关联的JobDetail即将执行时，由调度程序调用。
     * @param trigger
     * @param context
     */
    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        log.info("auartzTriggerListeners 即将执行");
    }

    /**
     *当触发器已触发，且关联的JobDetail即将执行时，由调度程序调用
     *
     * @param trigger  已触发的触发器
     * @param context  将被传递到的JobExecutionContext 作业'sexecute(xx)方法。
     * @return
     */
    @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
        log.info("auartzTriggerListeners 是否否决");
        return false;
    }

    /**
     *当触发器失败时，由调度程序调用。
     *
     * 应该考虑在这种方法上花费了多少时间，
     * *因为它会影响所有未触发的触发器。如果你有很多
     * * of trigger misfired at once, it could be a issue it this method . * of trigger会立刻触发错误，这个方法可能会有问题
     * 做了很多
     * @param trigger  触发错误的 。
     */
    @Override
    public void triggerMisfired(Trigger trigger) {
        log.info("auartzTriggerListeners 调用失败");
    }

    /**
     当触发器触发时，调度程序调用它，它的关联JobDetail已经执行，并且调用了Trigger (xx)方法。
     * @param trigger   被触发的触发器。
     * @param context   的JobExecutionContext 工作执行(xx) 的方法。
     * @param triggerInstructionCode    调用Trigger's Trigger (xx)的结果方法。
     */
    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context, Trigger.CompletedExecutionInstruction triggerInstructionCode) {
        log.info("auartzTriggerListeners执行完毕");
    }
}
